// Copyright (C) 2023 即时通讯网(52im.net) & Jack Jiang.
// The RainbowChat Project. All rights reserved.
// 
// 【本产品为著作权产品，合法授权后请放心使用，禁止外传！】
// 【本次授权给：<北京小羊驼科技有限公司>，授权编号：<NT231212144350>，代码指纹：<A.702363430.550>，技术对接人微信：<ID: wxid_wbyootvkdcgj22>】
// 【授权寄送：<收件：苏先生、地址：北京市大兴区北京密码西区6号楼1单元301、电话：18613885610、邮箱：bd@huiyuanxiang-inc.com>】
// 
// 【本系列产品在国家版权局的著作权登记信息如下】：
// 1）国家版权局登记名(简称)和权证号：RainbowChat    （证书号：软著登字第1220494号、登记号：2016SR041877）
// 2）国家版权局登记名(简称)和权证号：RainbowChat-Web（证书号：软著登字第3743440号、登记号：2019SR0322683）
// 3）国家版权局登记名(简称)和权证号：RainbowAV      （证书号：软著登字第2262004号、登记号：2017SR676720）
// 4）国家版权局登记名(简称)和权证号：MobileIMSDK-Web（证书号：软著登字第2262073号、登记号：2017SR676789）
// 5）国家版权局登记名(简称)和权证号：MobileIMSDK    （证书号：软著登字第1220581号、登记号：2016SR041964）
// * 著作权所有人：江顺/苏州网际时代信息科技有限公司
// 
// 【违法或违规使用投诉和举报方式】：
// 联系邮件：jack.jiang@52im.net
// 联系微信：hellojackjiang
// 联系QQ号：413980957
// 授权说明：http://www.52im.net/thread-1115-1-1.html
// 官方社区：http://www.52im.net
package com.x52im.rbchat.logic.contact.viewholder;

import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.eva.epc.common.util.CommonUtils;
import com.x52im.rbchat.R;
import com.x52im.rbchat.cache.ImageCacheLoader;
import com.x52im.rbchat.logic.contact.FriendListAdapter;
import com.x52im.rbchat.logic.contact.model.FriendItemValue;

import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView;

/**
 * 好友列表item的viewHolder实现类。
 *
 * @author JackJiang
 * @since 8.0
 */
public class FriendItemViewHolder extends RecyclerView.ViewHolder{

    private Fragment fragment;
    private FriendListAdapter adapter;

    /** 头像图片显示组件 */
    private ImageView ivAvatar;
    /** 快速索引字母显示组件 */
    private TextView tvCatlog;
    /** 昵称显示组件 */
    private TextView tvNickname;
    /** 在线、离线状态显示组件 */
    private TextView tvOnlineFlag = null, tvOfflineFlag = null;

    public FriendItemViewHolder(Fragment fragment, FriendListAdapter adapter, View itemView) {
        super(itemView);
        this.fragment = fragment;
        this.adapter = adapter;

        this.ivAvatar = itemView.findViewById(R.id.contact_item_avatarView);
        this.tvNickname = itemView.findViewById(R.id.contact_item_nameView);
        this.tvCatlog = itemView.findViewById(R.id.contact_item_categoryTextView);

        this.tvOnlineFlag = itemView.findViewById(R.id.contact_item_friend_statusOnlineFlagView);
        this.tvOfflineFlag = itemView.findViewById(R.id.contact_item_friend_statusOfflineFlagView);
    }

    public void onBind(FriendItemValue userInfo) {
        if (userInfo.isShowCategory()) {
            tvCatlog.setVisibility(View.VISIBLE);
            tvCatlog.setText(userInfo.getCategory());
        } else {
            tvCatlog.setVisibility(View.GONE);
        }

        tvNickname.setText(userInfo.getFriendInfo().getNickNameWithRemark());

        // liveStatus=0以灰色显示状态名称
        if (0 == userInfo.getFriendInfo().getLiveStatus())
        {
            tvOnlineFlag.setVisibility(View.GONE);
            tvOfflineFlag.setVisibility(View.VISIBLE);// TODO: VISIBLE
        }
        // liveStatus=1以绿色显示状态名称
        else if (1 == userInfo.getFriendInfo().getLiveStatus())
        {
            tvOnlineFlag.setVisibility(View.VISIBLE);
            tvOfflineFlag.setVisibility(View.GONE);
        }

        // 根据Glide官方指南的说明：https://muyangmin.github.io/glide-docs-cn/doc/getting-started.html#%E5%9C%A8-listview-%E5%92%8C-recyclerview-%E4%B8%AD%E7%9A%84%E4%BD%BF%E7%94%A8
        // 由于RecycleView中view的复用问题，为了防止图片显示错乱，如果它在之前的位置上用 Glide 进行过加载操作，那么在新的位置上要去执行一个新的加载操作或调用 clear()，
        // 实测通过clear()或通过Glide.with(context).load(默认占位图的资源id)两种方式都可以解决错乱问题，但clear更好，因为它不会在发生图片显示时闪烁一下的问题
//      Glide.with(context).load(R.drawable.main_alarms_sns_addfriendreject2r_message_icon).into(holder.viewIcon); // 解决方法1
        Glide.with(fragment).clear(ivAvatar);// 解决方法2
        // clear完成后设置默认占位图，确保图片显示不出现Glide导致的错位问题
        ivAvatar.setImageResource(R.drawable.default_avatar_for_contact_40dp_21pxround);

        // 头像文件名
        String userAvatarFileName = userInfo.getFriendInfo().getUserAvatarFileName();
        // 头像文件名为空就表示此人是没有被设置头像的
        if(!CommonUtils.isStringEmpty(userAvatarFileName, true)) {
            // 加载头像图片
            ImageCacheLoader.loadAvatarImgWithGlide(fragment, userInfo.getFriendInfo().getUser_uid(), userAvatarFileName
                    , ivAvatar
                    , 7 // 圆角单位是dp，（相当于xxhdpi下的21像素）
                    , R.drawable.default_avatar_for_contact_40dp_21pxround, false, false);
        }
    }
}
